When reading data from a memory device, a memory controller attempts to estimate a window of time when data read from the memory device is valid. However, the read data strobe (DQS) phase relative to clock (CK) is highly variable and is subject to both low frequency and high frequency fluctuations. This variability makes it difficult to predict when to open and close the window.